home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-13
/
xvisrc.zip
/
SIGNAL.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-28
|
3KB
|
158 lines
/* Copyright (c) 1990,1991,1992 Chris and John Downey */
#ifndef lint
static char *sccsid = "@(#)signal.c 2.1 (Chris & John Downey) 7/29/92";
#endif
/***
* program name:
xvi
* function:
PD version of UNIX "vi" editor, with extensions.
* module name:
signal.c
* module function:
Signal handling routines.
This is all fairly system-dependent, & may be replaced by more
system-specific routines if required. On MS-DOS, for instance,
this module isn't used at all: ignore_signals() &
catch_signals() are defined in msdos_c.c & msdos_a.asm instead.
* history:
STEVIE - ST Editor for VI Enthusiasts, Version 3.10
Originally by Tim Thompson (twitch!tjt)
Extensive modifications by Tony Andrews (onecom!wldrdg!tony)
Heavily modified by Chris & John Downey
***/
#include "xvi.h"
/*
* Signal handlers.
*/
#ifdef SIGINT
static void int_handler P((int));
#endif
#ifdef SIGTSTP
static void tstp_handler P((int));
#endif
#ifdef SIGHUP
static void hup_handler P((int));
#endif
#ifdef SIGTERM
static void term_handler P((int));
#endif
void
ignore_signals()
{
#ifdef SIGINT
(void) signal(SIGINT, SIG_IGN);
#endif
#ifdef SIGBREAK
/*
* On OS/2, this is generated by pressing control-break.
*/
(void) signal(SIGBREAK, SIG_IGN);
#endif
#ifdef SIGQUIT
(void) signal(SIGQUIT, SIG_IGN);
#endif
#ifdef SIGTSTP
(void) signal(SIGTSTP, SIG_IGN);
#endif
/*
* There isn't much point in catching or ignoring SIGHUP
* signals until we have some modified buffers to preserve.
*/
#ifdef SIGTERM
(void) signal(SIGTERM, SIG_IGN);
#endif
}
void
catch_signals()
{
#ifdef SIGINT
(void) signal(SIGINT, int_handler);
#endif
#ifdef SIGBREAK
/*
* On OS/2, this is generated by pressing control-break.
*/
(void) signal(SIGBREAK, int_handler);
#endif
#ifdef SIGTSTP
(void) signal(SIGTSTP, tstp_handler);
#endif
#ifdef SIGHUP
(void) signal(SIGHUP, hup_handler);
#endif
#ifdef SIGTERM
(void) signal(SIGTERM, term_handler);
#endif
}
/*
* Handler for SIGINT (keyboard interrupt).
*/
#ifdef SIGINT
static void
int_handler(sig)
int sig;
{
signal(SIGINT, int_handler);
kbdintr = 1;
}
#endif
/*
* This function is used on UNIX as the signal handler
* for the keyboard-generated TSTP signal.
*/
#ifdef SIGTSTP
static void
tstp_handler(sig)
int sig;
{
do_suspend(curwin);
}
#endif
/*
* This one is used for the hangup signal, which generally means that
* the terminal line has gone dead. This means sys_exit() doesn't make
* much sense, so we call exit() instead.
*/
#ifdef SIGHUP
static void
hup_handler(sig)
int sig;
{
signal(SIGHUP, SIG_IGN);
/*
* Make backup copies of all modified buffers.
*/
(void) do_preserve();
exit(0);
}
#endif
/*
* This one is used for the software-generated terminate signal.
*/
#ifdef SIGTERM
static void
term_handler(sig)
int sig;
{
signal(SIGTERM, SIG_IGN);
/*
* Make backup copies of all modified buffers.
*/
(void) do_preserve();
sys_exit(0);
}
#endif